草庐IT

linux - 检查 bash 脚本中是否至少给出了两个参数

我正在尝试编写一个模仿cp的脚本,其中有源和目标输入。如何计算命令行中给出的参数数量?例如:./myscriptsrcdest我如何检查是否至少提供了2样东西? 最佳答案 使用$#特殊变量。它的值是参数的数量。因此,如果您的脚本仅包含:echo$#然后像这样执行:thatscriptfoobarbazquux它会打印4。在您的情况下,您可能想要执行以下操作:if[$#-lt2];then#TODO:printusageexit1fi 关于linux-检查bash脚本中是否至少给出了两个参

linux - Bash:将字符串添加到文件末尾而不换行

如何在不换行的情况下将字符串添加到文件末尾?例如,如果我使用>>它将添加到文件末尾并换行:catlist.txtyourText1root@host-37:/#echoyourText2>>list.txtroot@host-37:/#catlist.txtyourText1yourText2我想在yourText1之后添加yourText2root@host-37:/#catlist.txtyourText1yourText2 最佳答案 可以使用echo的-n参数。像这样:$toucha.txt$echo-n"A">>a.txt$

linux - Bash 中有效标识符(例如函数、变量等)的规则是什么?

Bash中标识符的语法规则是什么,尤其是函数名和变量名?我编写了一个Bash脚本,并在Ubuntu、Debian、RedHat5和6,甚至是旧的Solaris8机器上的各种Bash版本上对其进行了测试。脚本运行良好,因此发布。然而当用户在SUSE机器上尝试它时,它给出了“不是有效的标识符”错误。幸运的是,我对函数名中存在无效字符的猜测是正确的。连字符搞砸了。事实上,至少经过一定程度测试的脚本在另一个Bash或发行版上会有完全不同的行为,这令人不安。我怎样才能避免这种情况? 最佳答案 来自manual:ShellFunctionDef

linux - 如何使用 Git for Windows 更改 Git Bash 中的目录?

如何在GitBash中切换到目录C:/Users/myname/projectname? 最佳答案 cd/c/users/myname/project\name请注意ls/或键入cd/后跟Tab键完成,可能不会显示此文件夹的存在,但cd/c仍然有效。另请注意,pwd(打印当前工作目录)可能显示类似/bin的内容,但这可能不是git等命令的实际工作文件夹clone,它可能使用启动GitBash的文件夹。 关于linux-如何使用GitforWindows更改GitBash中的目录?,我们在

linux - Bash - 通过运行第二个命令更新终端标题

在我的Ubuntu终端上,我经常运行长时间运行的程序。而且由于有很多这样的程序,我总是忘记哪个终端适用于哪个程序,除非我浏览所有这些程序。所以我想找到一种方法,在我运行命令时将我的终端标题更新为程序名称。我不想手动完成。我使用gnome-terminal,但答案不应该真的取决于它。基本上,如果我能够运行第二个命令,那么我可以简单地使用gconftool命令来更新标题。所以我希望找到一种方法来捕获bash中的命令并在每个命令后更新标题。我怎么做? 最佳答案 我有一些答案要告诉你:)你是对的,你使用的是gnome-terminal并不重

linux - Windows 10 上的 Ubuntu 上的 Bash 是否支持 USB?

关闭。这个问题不符合StackOverflowguidelines.它目前不接受答案。这个问题似乎不是关于aspecificprogrammingproblem,asoftwarealgorithm,orsoftwaretoolsprimarilyusedbyprogrammers的.如果您认为这个问题是关于anotherStackExchangesite的主题,您可以发表评论,说明问题可能在哪里得到解答。关闭去年。社区在去年审查了是否重新打开这个问题并让它关闭:原始关闭原因未解决Improvethisquestion我在dev/上没有关于usb的文件或路径当我插入闪存盘时,dev/或

linux - 如何在 bash 中优雅地存储和回显多行?

这个问题在这里已经有了答案:CapturingmultiplelineoutputintoaBashvariable(7个答案)关闭5年前。我正在尝试将一段文本捕获到一个变量中,并保留换行符,然后回显它。但是,当我捕获文本或显示文本时,换行符似乎没有得到维护。关于如何实现这一点有什么想法吗?示例:#!/bin/bashread-d''my_var输出:thisisatest期望的输出:thisisatest

linux - 如何检查 ssh-agent 是否已经在 bash 中运行?

我在我的Linux环境中有一个示例sh脚本,它基本上运行当前shell的ssh-agent,向它添加一个key并运行两个git命令:#!/bin/basheval"$(ssh-agent-s)"ssh-add/home/duvdevan/.ssh/id_rsagit-C/var/www/duvdevan/reset--hardorigin/mastergit-C/var/www/duvdevan/pulloriginmaster脚本实际上工作正常,但每次我运行它时我都会得到一个新进程,所以我认为这可能会成为一个性能问题,我可能最终会得到无用的进程。输出示例:Agentpid12109I

linux - 如何在 bash 中记录输出并同时在终端中看到它?

我有一些脚本,我需要在其中查看输出并将结果记录到文件中,最简单的示例是:$update-client>my.log我希望能够在命令运行时看到命令的输出,但也希望将其记录到文件中。我还记录了stderr,所以我希望能够在看到错误流的同时记录它。 最佳答案 update-client2>&1|teemy.log2>&1将标准错误重定向到标准输出,tee将其标准输入发送到标准输出和文件。 关于linux-如何在bash中记录输出并同时在终端中看到它?,我们在StackOverflow上找到一个

linux - 如何在将标准输出重定向到 Bash 文件时添加时间戳?

我有一个程序(服务器),我正在寻找一种方法(脚本)将其所有stdout重定向(或更好地复制)到文件并为每个条目添加时间戳。我做了一些研究,我能得到的最深入的研究要归功于HowtoaddtimestamptoSTDERRredirection.它重定向stdout但添加的时间戳是脚本完成的时间:#!/bin/bash./server|./predate.sh>log.txtpredate.sh代码:#!/bin/bashwhilereadline;doecho"$(date):${line}"done似乎服务器输出在程序退出后被刷新。(没有重定向它工作正常)。此外,如果我尝试在提到的线程